<?php

namespace Modules\Admin\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
use Modules\Admin\Http\Requests\RoleRequest;
use Spatie\Permission\Models\Role;

class RoleController extends Controller
{
    /**
     * Display a listing of the resource.
     * @return Response
     */
    public function index()
    {
        //获取所有角色的数据
         $roles=Role::where('name','!=',config('hd_module.webmaster'))->get();
        return view('admin::role.index',compact('roles'));
    }

    /**
     * Show the form for creating a new resource.
     * @return Response
     */
    public function create()
    {
        return view('admin::create');
    }

    /**
     * 添加方法
     * Store a newly created resource in storage.
     * @param  Request $request
     * @return Response
     */
    public function store(RoleRequest $request)
    {
       //roles表中的guard_name字段,会自动获取当前登录用户的守卫名称
        Role::create([
            'name'=>$request->input('name'),
            'title'=>$request->input('title')
        ]);
         //设置闪存信息并跳转
        session()->flash('success','添加角色成功');
        return redirect()->route('role.index');
    }

    /**
     * Show the specified resource.
     * @return Response
     */
    public function show()
    {
        return view('admin::show');
    }

    /**
     * Show the form for editing the specified resource.
     * @return Response
     */
    public function edit()
    {
        return view('admin::edit');
    }

    /**
     * Update the specified resource in storage.
     * @param  Request $request
     * @return Response
     */
    public function update(RoleRequest $request,$id)
    {
        //通过$id找到对应得数据
        $role=Role::find($id);
        $role->title=$request->input('title');
        $role->name=$request->input('name');
        $role->save();
        //设置闪存信息并跳转
        session()->flash('success','角色修改成功');
        return redirect()->route('role.index');
    }

    /**
     * Remove the specified resource from storage.
     * @return Response
     */
    public function destroy($id)
    {
        //用$id去找到对应的角色数据
        $role = Role::find($id);
        //判断如果当前需要删除的角色的英文标识name名等于网站的站长,就不删除
        if ($role['name'] == config('hd_module.webmaster')){
            session()->flash('danger','请不要挑战网站站长权威!!');
            return back();
        }
        //删除对应id的角色数据
        Role::destroy($id);
        //设置闪存信息
        session()->flash('success','角色删除成功');
        return back();
    }

    /**
     * 加载管理权限的模板
     * @param $roleid
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function showPermission($roleid){
        //根据roleid获取对应角色数据
        $role = Role::find($roleid);
        //获取所有模块的权限数据 （执行命令 lawa-artisan hd:permission Admin）
        $permissions = \HDModule::getPermissionByGuard('admin');
        return view('admin::role.permission',compact('permissions','roleid','role'));
    }
    public function permission(Request $request,$roleid){
          //判断如果没有选择给用户返回信息
        if(!$request->input('name')){
            session()->flash('danger','最少设置一个权限或者返回不设置');
            return back();
        }
        //给对应角色添加对应权限的数据,应该首先获取到当前角色id所对应的角色
        $role = Role::find($roleid);
        //使用手册中的同步方法为角色添加权限
        $role->syncPermissions($request->input('name'));
        //设置闪存信息并跳转
        session()->flash('success','设置角色权限成功');
        return back();
    }
}
